package duplas;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;

public class DuplaSemana implements Serializable {

	private static final long serialVersionUID = 1L;
	private static HashMap<Integer, ArrayList<DuplaSemana>> _todos;
	public static HashMap<Integer, ArrayList<DuplaSemana>> getTodos() {
		if (_todos == null)
			deSerializa();
		
		return _todos;
	}
	
	public static void setTodos(HashMap<Integer, ArrayList<DuplaSemana>> todos) {
		DuplaSemana._todos = todos;
	}
	
	public static void main(String[] args){
		DuplaSemana.deSerializa();
		System.out.println(DuplaSemana.getTodos());
	}
	
	private String _nomeDupla1;
	private String _nomeDupla2;
	private Integer _semana;
	
	public static void serializa() {
		FileOutputStream fos = null;
		ObjectOutputStream out = null;
		try {
			fos = new FileOutputStream("duplaSemana.dat");
			out = new ObjectOutputStream(fos);
			out.writeObject(_todos);
			out.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	
	@SuppressWarnings("unchecked")
	public static HashMap<Integer, ArrayList<DuplaSemana>> deSerializa() {
		FileInputStream fis = null;
		ObjectInputStream in = null;
		try {
			fis = new FileInputStream("duplaSemana.dat");			
			in = new ObjectInputStream(fis);
			_todos = (HashMap<Integer, ArrayList<DuplaSemana>>) in.readObject();
			in.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		}
		
		if (_todos == null)
			_todos = new HashMap<Integer, ArrayList<DuplaSemana>>();
			
		
		return _todos;
	}
	
	public String toString(){
		return "<" + getNomeDupla1() + " , " + getNomeDupla2() + " , " + getSemana() + ">";
	}
	
	public DuplaSemana(String nomeDupla1, String nomeDupla2, String semana){
		_nomeDupla1 = nomeDupla1;
		_nomeDupla2 = nomeDupla2;
		 if (! "X".equals(semana) ) {
			 _semana = Integer.parseInt(semana);
			 insereEmTodos(this);
		 }
	}
	
	private static void insereEmTodos(DuplaSemana duplaSemana) {
		ArrayList<DuplaSemana> duplasDaSemana = getTodos().get(duplaSemana.getSemana());
		if (duplasDaSemana == null)
			duplasDaSemana = new ArrayList<DuplaSemana>();
		
		duplasDaSemana.add(duplaSemana);
		getTodos().put(duplaSemana.getSemana(), duplasDaSemana);
	}

	public String getNomeDupla1() {
		return _nomeDupla1;
	}
	public void setNomeDupla1(String nomeDupla1) {
		this._nomeDupla1 = nomeDupla1;
	}
	public String getNomeDupla2() {
		return _nomeDupla2;
	}
	public void setNomeDupla2(String nomeDupla2) {
		this._nomeDupla2 = nomeDupla2;
	}
	public Integer getSemana() {
		return _semana;
	}
	public void setSemana(Integer semana) {
		this._semana = semana;
	}
	
	

}
